package com.ideaaedi.zoo.diy.feature.file.api.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.http.HttpMethod;

import javax.annotation.Nonnull;
import java.util.Date;
import java.util.Map;

/**
 * 生成临时url的相关参数
 *
 * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @since 1.0.0
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GeneratePresignedUrlParamDTO {

    /**
     * （不带文件名的）文件路径
     * <pre>
     * 注：开头不要有 / ，结尾要有 / ， 如: a/b/c/
     * </pre>
     */
    @Nonnull
    @Builder.Default
    private String path = "";

    /**
     * 文件名
     * <pre>
     * 文件名，如： demo.txt
     * </pre>
     */
    @Nonnull
    @Builder.Default
    private String filename = "";

    /**
     * 生效开始时间，仅 Azure Blob Storage 存储平台支持
     */
    private Date startTime;

    /**
     * 到期时间
     */
    @Nonnull
    private Date expiration;

    /**
     * HTTP 请求方法
     */
    @Nonnull
    @Builder.Default
    private HttpMethod httpMethod = HttpMethod.GET;

    /**
     * 特殊操作符，可以直接传入字符串或对应存储平台支持的类型，仅华为云存储平台支持
     */
    private Object specialParam;

    /**
     * 请求头（元数据）
     */
    private Map<String, String> headers;

    /**
     * 用户元数据
     */
    private Map<String, String> userMetadata;

    /**
     * 查询参数
     */
    private Map<String, String> queryParams;

    /**
     * 要在服务响应中重写的标头，实际效果以每个存储平台支持为准
     */
    private Map<String, String> responseHeaders;
}
